home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / source / graphicgems4.lha / GemsIV / curve_isect / test.cc < prev    next >
Encoding:
C/C++ Source or Header  |  1995-02-06  |  2.3 KB  |  81 lines

  1. #include "Bezier.h"
  2. #include <stdio.h>
  3.  
  4. #define H 1200.0
  5. #define STEPS 3
  6. main()
  7.     {
  8.     point Origin = point( 0, 0 );
  9.     point p0 = Origin;
  10.     point p1 = Origin + vector( H, H/2 );
  11.     point p2 = Origin + vector( -7*H/10,  2*H/10 );
  12.     point p3 = Origin + vector(  4*H/10,  0 );
  13.     point q0 = Origin + vector( 5*H/100,  0 );
  14.     point q1 = Origin + vector( 35*H/100, H );
  15.     point q2 = Origin + vector(  25*H/100, -7*H/10 );
  16.     point q3 = Origin + vector(  0, 4*H/10 );
  17.     puts( "%!\n0 setlinewidth\n" );
  18.     puts( "0 1 0 setrgbcolor\n" );
  19.     int rg = 0;
  20.     Bezier A = Bezier( &p0, &p1, &p2, &p3 );
  21.     Bezier B = Bezier( &q0, &q1, &q2, &q3 );
  22.     printf( "%g %g scale\n", 72 * 8.0 / H , 72 * 10.0/H );
  23.     printf( "%g %g translate\n", H*0.1, H*0.1 );
  24.     printf( "/rad 5 def\n" );
  25.     Bezier **curves = B.Intersect( A );
  26.     for( int i = 0; i < 10; i++ )
  27.     {
  28.     if( curves[0][i].p0 == NULL )
  29.         {
  30.         break;
  31.         }
  32.     printf( "%d %d 0 setrgbcolor\n", rg, 1-rg );
  33.     rg = 1-rg;
  34.     printf( "%15.9f %15.9f moveto\n", 
  35.         curves[0][i].p0->x, curves[0][i].p0->y );
  36.     printf( "%15.9f %15.9f %15.9f %15.9f %15.9f %15.9f curveto stroke\n",
  37.         curves[0][i].p1->x,  curves[0][i].p1->y,
  38.         curves[0][i].p2->x,  curves[0][i].p2->y,  
  39.         curves[0][i].p3->x,  curves[0][i].p3->y );
  40.     printf( "%15.9f %15.9f moveto\n", 
  41.         curves[1][i].p0->x, curves[1][i].p0->y );
  42.     printf( "%15.9f %15.9f %15.9f %15.9f %15.9f %15.9f curveto stroke\n",
  43.         curves[1][i].p1->x,  curves[1][i].p1->y,
  44.         curves[1][i].p2->x,  curves[1][i].p2->y,  
  45.         curves[1][i].p3->x,  curves[1][i].p3->y );
  46.     }
  47.     puts( "showpage\n" );
  48.     
  49. #   ifdef PROFILE
  50.     for( i = 0; i < STEPS; i++ )
  51.     {
  52.     p0 = p0 + vector(  H/STEPS, H/STEPS );
  53.     for( int j = 0; j < STEPS; j++ )
  54.         {
  55.         p1 = p1 + vector( -5*H/STEPS, H/(3*STEPS) );
  56.         for( int k = 0; k < STEPS; k++ )
  57.         {
  58.         p2 = p2 + vector( 5*H/STEPS, -H/(3*STEPS) );
  59.         for( int l = 0; l < STEPS; l++ )
  60.             {
  61.             p3 = p3 + vector(  -H/STEPS, -H/STEPS );
  62.             for( int m = 0; m < STEPS; m++ )
  63.             {
  64.             q0 = q0 + vector( H/STEPS, H/STEPS );
  65.             for( int n = 0; n < STEPS; n++ )
  66.                 {
  67.                 q1 = q1 + vector( H/(3*STEPS), -2*H/STEPS );
  68.                 for( int o = 0; o < STEPS; o++ )
  69.                 {
  70.                 q2 = q2 + vector( -H/(3*STEPS), -2*H/STEPS );
  71.                 curves = A.Intersect( B );
  72.                 }
  73.                 }
  74.             }
  75.             }
  76.         }
  77.         }
  78.     }
  79. #   endif
  80.     }
  81.